package com.milo.concurrent;

import java.util.concurrent.CountDownLatch;

/**
 * @author: Milogenius
 * @create: 2019-04-29 14:59
 * @description: 演示CountDownLatch的用法
 * 等待多线程完成的CountDownLatch,CountDownLatch也可以实现join的功能(实现等待/通知模式)
 **/
public class CountDownLatchTest {

    /**
     * 如果你想等待N个点完成，这里就传入N
     */
    static CountDownLatch c = new CountDownLatch(2);

    public static void main(String[] args) throws InterruptedException {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(1);

                /**
                 * 由于countDown方法可以用在任何地方，所以这里说的N个点，可以是N个线程，
                 * 也可以是1个线程里的N个执行步骤。用在多个线程时，只需要把这个
                 * CountDownLatch的引用传递到线程里即可
                 */
                c.countDown();
                System.out.println(2);
                c.countDown();
            }
        }).start();
        //CountDownLatch的await方法会阻塞当前线程，直到计数器变成零
        c.await();
        System.out.println("3");
    }
}

